package com.liunian.duplication2.hash;

import java.util.*;

public class GroupAnagrams49 {

    /**
     给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

     示例 1:
     输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
     输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
     解释：
     在 strs 中没有字符串可以通过重新排列来形成 "bat"。
     字符串 "nat" 和 "tan" 是字母异位词，因为它们可以重新排列以形成彼此。
     字符串 "ate" ，"eat" 和 "tea" 是字母异位词，因为它们可以重新排列以形成彼此。

     示例 2:
     输入: strs = [""]
     输出: [[""]]

     示例 3:
     输入: strs = ["a"]
     输出: [["a"]]
     */
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for (String str : strs) {
            int[] count = new int[26];
            for (char c : str.toCharArray()) {
                count[c - 'a']++;
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < count.length; i++) {
                if (count[i] != 0) {
                    for (int i1 = 0; i1 < count[i]; i1++) {
                        sb.append('a' + i);
                    }
                }
            }
            String key = sb.toString();
            List<String> orDefault = map.getOrDefault(key, new ArrayList<>());
            orDefault.add(str);
            map.put(key, orDefault);
        }
        return new ArrayList<>(map.values());
    }
    public static void main(String[] args) {
        GroupAnagrams49 group = new GroupAnagrams49();
        System.out.println(group.groupAnagrams(new String[]{"eat", "tea", "tan", "ate", "nat", "bat"}));
    }

}
